
#pragma once
#include <memory> // 智能指针头文件
#include <thread> // 线程头文件
#include <string>

class  Scene;

class Engine
{
private:
    long _deltaTime;
    int _frameRate;

    /**
     * @brief 初始化窗口
     */
    void _initWindow();
    /**
     * @brief 初始化图形库
     */
    void _initGFX();
    /**
     * @brief 初始化字体
     */
    void _initFont();
    /**
     * @brief 初始化资产管理器
     */
    void _initAssetMgr();

    


    bool _isRenderering;
    std::thread _renderThread;           // 渲染线程
    void _startRendererThread();
    void _updateRendererLoop();
    void _stopRendererThread();

    // 场景
    Scene *_curScene;
public:
    Engine();
    /**
     * 初始化
     */
    void init();
    /**
     * 启动
     */
    void launch();
    void tick();
    void update(float dt);
    Scene *openScene(std::string sceneName);
    ~Engine();
};
